﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Microsoft.Xna.Framework.Graphics;
using EpsiRisk.MoteurJeu;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework;

namespace EpsiRisk.DonneesPlateau
{
    [XmlType]
    public class ClassSousTerritoire
    {

        public ClassSousTerritoire()
        {
        }

        /// <summary>
        /// Constructeur à partir du nom du pays
        /// </summary>
        /// <param name="name">Nom du pays</param>
        public ClassSousTerritoire(string name)
        {
            Nom = name;
        }


        private ClassJoueur proprietaire;

        [XmlElement]
        public ClassJoueur Proprietaire
        {
            get { return proprietaire; }
            set
            {
                if (proprietaire != null)
                {
                    proprietaire.nbTerritoires--;
                } 
                proprietaire = value;
                proprietaire.nbTerritoires++;
            }
        }

        /// <summary>
        /// nom du sous territoire
        /// </summary>
        [XmlAttribute]
        public string Nom;


        /// <summary>
        /// Voisins du territoire
        /// </summary>
        [XmlIgnore]
        public List<ClassSousTerritoire> Voisins = new List<ClassSousTerritoire> { };

        /// <summary>
        /// Coéfficient
        /// </summary>
        [XmlIgnore]
        public float coefIA ;

        [XmlElement]
        public List<ClassSoldat> Armee = new List<ClassSoldat> { };


        [XmlIgnore]
        public Texture2D calque;

        /// <summary>
        /// position d'affichage du nbre d armees sur le territoire
        /// </summary>
        [XmlElement]
        public Vector2 armeesDisplayPosition;

        /// <summary>
        /// Ajouter un soldat au territoire
        /// </summary>
        internal void ajouterSoldat()
        {
            Armee.Add(new ClassSoldat());
        }

        /// <summary>
        /// Ajouter des soldats au territoire
        /// </summary>
        /// <param name="nbsoldat">nombredesoldat</param>
        internal void ajouterSoldat(int nbsoldat)
        {
            for (int count = 0; nbsoldat > count; count++ )
                Armee.Add(new ClassSoldat());
        }
        /// <summary>
        /// Enlever un soldat du territoire
        /// </summary>
        internal void enleverSoldat()
        {
            if (Armee.Count() > 0)
            {
                Armee.RemoveAt(0);
            }
        }

        /// <summary>
        /// Déplacer des soldats d'un territoire à un autre
        /// </summary>
        /// <param name="destination">Sous-territoire de destination</param>
        /// <param name="nb">Nombre d'unités à déplacer</param>
        internal void deplacerSoldats(ClassSousTerritoire destination, int nb)
        {
            int i;
            for (i = 0; i < nb; i++)
            {
                if (this.nbArmees > 1)
                {
                    this.enleverSoldat();
                    destination.ajouterSoldat();
                }
            }
        }

        [XmlIgnore]
        public int nbArmees
        {
            get
            {
                return Armee.Count;
            }
        }
    }
}
